/**
 * Created with IntelliJ IDEA
 * Description:
 * User:恋恋
 * Date:2022-04-06
 * Time:22:34
 */
public class TestDemo {
    int a=10;
    public int b=20;
    private int c=30;
    static int e=100;
    public static void add(){

        System.out.println("成员方法");
    }

    //实例内部类——未被static修饰
    class Innerclass{
        int a=5;//当实例内部类和外部类成员变量同名时，先访问谁的
        static final int d=66;//若想在内部类中定义静态变量，需加上final修饰，这该变量变成了常量（#define)-->编译的时候就确定了
        public void toSting(){//
            add();
            c=60;
            e=50;
            System.out.println("内部类可以直接访问外部类中，任何被限定符修饰的成员变量和成员方法");
            //a=5;
            System.out.println("内部类中的a="+a);
            System.out.println("外部类中的a="+TestDemo.this.a);//在内部类中访问与外部类相同名字的成员：外部类类名.this.变量名
            //若在内部类中改变值，外部类是否也会改变--是的
            //b=20
            System.out.println("外部类中未改的b="+TestDemo.this.b);
            b=30;
            System.out.println("外部类中的改后的b="+TestDemo.this.b);
        }
       /* public static void NO(){
            System.out.println("实例内部类中不能定义静态方法");
        }*/
    }

    public static void main(String[] args) {
        //访问外部类的成员--》实例化对象
        System.out.println("*****    访问外部类   *****");
        TestDemo test1=new TestDemo();
        System.out.println("a="+test1.a);
        System.out.println("b="+test1.b);
        System.out.println("c="+test1.c);//private只能在当前类中访问
        test1.add();
        System.out.println("******   访问内部类   *****");
        //因为内部类定义与外部类成员定义位置相同，所以要访问内部类，则创建内部类对象时必须借助外部类
       // TestDemo.Innerclass Test2=new TestDemo().new Innerclass();
        //等效代换
        TestDemo.Innerclass test2=test1.new Innerclass();
        test2.toSting();

//总结：实例化内部--可以定义静态（为常量）与非静态的成员变量和定义非静态的成员方法（不能定义静态方法）
//        //可以访问外部类的成员变量和成员方法,类方法、类变量
//注意：类里只有成员方法和成员变量、类方法、类变量
    }
}
